Day21介紹了URDF、SDF分別代表的意義,也都提到了基本架構。單純看基本架構看不太出兩者的不同,因為還有很多xml的<element>
元素還沒被介紹到,就是因為這些<element>
的些微不同讓兩者的改寫上沒那麼容易。
昨天也有提到URDF可以被Gazebo解析成SDF,URDF相對上比較容易理解,而且如果不考慮物理碰撞模擬(Gazebo)的話,單純有URDF機器人外觀就能好好的呈現在RViz上了。
<robot>
<robot>
是描述機器人文件中的根元素,也就是最外層一定得存在的元素。<robot>
一個屬性name,是你正在描述的者台機器人的名稱,以及子元素<link>
、<joint>
、<transmission>
、<gazebo>
。<robot name="robotName">
...
</robot>
後面兩個子元素昨天沒提示因為如果你不打算控制這台機器人,其實可以不急著學。
不過我還是用我目前的理解介紹一下它們。
<transmission>
:描述機器人的關節<joint>
是如何被控制。<gazebo>
:和gazebo控制有關,讓你在編寫URDF時可以透過此元素影響SDF。<link>
為<robot>
的子元素,也有name屬性。
<link name="my_link">
<inertial>
<origin xyz="0 0 0.5" rpy="0 0 0"/>
<mass value="1"/>
<inertia ixx="100" ixy="0" ixz="0" iyy="100" iyz="0" izz="100" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<box size="1 1 1" />
</geometry>
<material name="Cyan">
<color rgba="0 1.0 1.0 1.0"/>
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<cylinder radius="1" length="0.5"/>
</geometry>
</collision>
</link>
link的子元素
...待補細節
<joint>
<robot>
的子元素,負責描述關節的動力學等基本資訊,有name及type屬性。 <joint name="my_joint" type="floating">
<origin xyz="0 0 1" rpy="0 0 3.1416"/>
<parent link="link1"/>
<child link="link2"/>
<calibration rising="0.0"/>
<dynamics damping="0.0" friction="0.0"/>
<limit effort="30" velocity="1.0" lower="-2.2" upper="0.7" />
<safety_controller k_velocity="10" k_position="15" soft_lower_limit="-2.0" soft_upper_limit="0.5" />
</joint>
...待補細節